Component org.nuxeo.theme.styling.service
In bundle org.nuxeo.theme.styling
Documentation
The ThemeStylingService service provides extension points for pluggable resources and resource bundles management per page.
@since 5.5
Requirements
Resolution Order
921
The resolution order represents the order in which this component has been resolved by the Nuxeo Runtime
framework.
You can influence this order by adding "require" tags in your component declaration, to make sure it is resolved after another component.
Start Order
935
The start order represents the order in which this component has been started by the Nuxeo Runtime framework.
This number is interesting to tweak if your Java component interacts with other components, and needs to be started before or after another one.
It can be changed by implementing the method "Component#getApplicationStartedOrder()" on your Java component: components are sorted according to this reference value, in increasing order.
The default value is 1000, and the repository initialization uses number 100. Negative values can also be used.
Implementation
Class:
org.nuxeo.theme.styling.service.ThemeStylingServiceImpl
Services
Extension Points
XML Source
<?xml version="1.0"?>
<component name="org.nuxeo.theme.styling.service">
<documentation>
The ThemeStylingService service provides extension points for
pluggable resources and resource bundles management per page.
@since 5.5
</documentation>
<require>org.nuxeo.ecm.platform.WebResources</require>
<service>
<provide interface="org.nuxeo.theme.styling.service.ThemeStylingService" />
</service>
<implementation class="org.nuxeo.theme.styling.service.ThemeStylingServiceImpl" />
<extension-point name="pages">
<documentation>
The pages extension point allows to define a set of resources and
resource bundles for a given "page", as well as additional information
about available flavors, for instance.
Example:
<code>
<page name="galaxy/default" charset="utf-8">
<defaultFlavor>default</defaultFlavor>
<flavors>
<flavor>default</flavor>
<flavor>rainbow</flavor>
</flavors>
<resources>
<bundle>nuxeo_includes</bundle>
<bundle>nuxeo_base</bundle>
<bundle>nuxeo_header_footer</bundle>
<bundle>nuxeo_dm</bundle>
<resource>my_resource.css</resource>
</resources>
</page>
</code>
The charset and favorites are used inside the page head.
Flavors define available flavors on this page, resource bundles are
also references (see corresponding extension points on this same component).
This extension point accepts merge. When contributing new elements to
flavors or resources, the attribute append="true" should be added,
otherwise existing configurations will be overridden.
Attribute "charset" is available only since 7.4 (it was previously
defined by the Theme extension point layout configuration).
</documentation>
<object class="org.nuxeo.theme.styling.service.descriptors.PageDescriptor" />
</extension-point>
<extension-point name="flavors">
<documentation>
The flavors extension point allows to define a set of variables that can
be referenced inside CSS files, for dynamic replacement depending on
context, as well as a logo.
Example:
<code>
<flavor name="default">
<label>label.theme.flavor.nuxeo.default</label>
<logo>
<path>/img/nuxeo_logo.png</path>
<previewPath>/img/nuxeo_preview_logo_black.png</previewPath>
<width>113</width>
<height>20</height>
<title>Nuxeo</title>
</logo>
<links>
<icon name="icon">/icons/favicon.png</icon>
<icon name="shortcut icon">/icons/favicon.ico</icon>
</links>
<presetsList>
<presets category="border" src="themes/palettes/default-borders.properties" />
<presets category="background" src="themes/palettes/default-backgrounds.properties" />
<presets category="font" src="themes/palettes/default-fonts.properties" />
<presets category="color" src="themes/palettes/default-colors.properties" />
</presetsList>
<palettePreview>
<colors>
<color>#17384e</color>
<color>#00adff</color>
<color>#00adff</color>
<color>#00adff</color>
<color>#fff</color>
<color>#00adff</color>
<color>#404040</color>
<color>#cfecff</color>
<color>#e6f1ff</color>
</colors>
</palettePreview>
</flavor>
</code>
The presets files are looked up in the jar holding the flavor declaration.
CSS files will reference the flavor marker, as well as additionnal hint
about the type of preset to use:
<code>
.nx-page input[type="button"] {
background: none "button (__FLAVOR__ background)";
border-radius: 2px;
border: 1px solid;
border-color: "button (__FLAVOR__ border)";
color: "link.action (__FLAVOR__ color)";
cursor: pointer;
display: inline-block;
font-size: .95em;
font-weight: bold;
line-height: 1.3em;
margin: 0 .5em .5em 0;
padding: .4em .9em;
text-decoration: none;
white-space: nowrap }
</code>
The current flavor can be computed at runtime using negotiator logics, see
the negotiators extension point on this service.
The default flavor defined for a given page will be used if
the page does not accept this flavor in its configuration.
Attribute "links" is available only since 7.4 and allows to define
favicons visible on the page (it was previously defined by the Theme
extension point layout configuration).
</documentation>
<object class="org.nuxeo.theme.styling.service.descriptors.FlavorDescriptor" />
</extension-point>
<extension-point name="negotiations">
<documentation>
The negotations extension point allows to define a list of Java classes
that will compute the current page or current flavor to use, depending
on the context.
Example:
<code>
<negotiation target="jsfFlavor">
<negotiator class="org.nuxeo.ecm.web.resources.jsf.negotiators.RequestParameter"
order="10">
<property name="param">flavor</property>
</negotiator>
<negotiator class="org.nuxeo.ecm.web.resources.jsf.negotiators.RequestAttribute"
order="20">
<property name="param">flavor</property>
</negotiator>
<negotiator class="org.nuxeo.ecm.localconf.LocalThemeFlavor"
order="30">
<property name="negotiatedPageVariable">jsfPage</property>
</negotiator>
<negotiator
class="org.nuxeo.ecm.web.resources.jsf.negotiators.DefaultPageFlavor"
order="100">
<property name="negotiatedPageVariable">jsfPage</property>
</negotiator>
</negotiation>
</code>
Negotiator classes must implement the
org.nuxeo.theme.styling.negotiation.Negotiator interface. The abstract
class org.nuxeo.theme.styling.negotiation.AbstractNegotiator can be
extended to benefit from generic implementation.
The context used in negotiator API can depend on the caller. In JSF
default pages, this context will be the current JSF FacesContext.
@since 7.4
</documentation>
<object class="org.nuxeo.theme.styling.service.descriptors.NegotiationDescriptor" />
</extension-point>
</component>